@TIL / 2024-09-25
broswerslist 설정하기

React에서 pre-render 해보기 (SSG)
상황
axios에서 fetch로 migration 하는 중 fetch의 호환성 때문에 polyfill 라이브러리를 설치해줬었다. 근데 30KB나 차지하는 라이브러리가 꼭 필요한 건지 의문이 들었고, 그렇다면 어디 브라우저까지 대응을 해줘야 하는지 궁금해졌다. 따라서 이에 대해 공부를 한 뒤 적용을 해보기로 하였다.
browserslist
browserslist란?
browserslist는 project의 target browsers를 지정할 수 있는 도구이다. 이를 설정해줌으로써 다른 개발자가 “어떤 브라우저를 support 하는지?” 물어보지 않아도 된다.
왜 필요한가?
ES6(ES2015)를 기점으로 JS에는 async/await, Array.prototype.at() 등 개발하는 데 있어 더 편하게 해주는 최신 기능들이 여럿 추가되었다. 하지만 모든 브라우저가 ES6+를 지원하는 것은 아니다. 오래된 브라우저는 ES5까지만 지원할 수도 있다. 이럴 경우 해당 브라우저에서는 ES6 코드(async 등)이 작동하지 않게 된다. 이러한 브라우저에서도 해당 코드들이 동작하기 위해선 polyfill을 설정해줘야 한다. (크로스 브라우징.) 하지만 polyfill이 추가될 수록 그만큼 불러와야 할 JS 코드가 많아지게 된다. 다시 말해 실행해야 하는 polyfill이 많아져 성능이 떨어질 수 있는 것이다. 이때 browserslist를 지정하면 polyfill을 처리하는 transpiler, bundler가 지원하고자 하는 브라우저를 알 수 있게 되어 필요한 JS 코드만 불러올 수 있게 되어 최적화가 진행되는 것이다.
browserslist 설정
Browserslist의 default browsers는 > 0.5%, last 2 versions, Firefox ESR, not dead
이다.
defaults로 설정한 뒤 npx browserslist
를 실행하면 아래와 같이 지원 가능한 브라우저 목록이 뜬다.
and_chr 124
and_ff 125
and_qq 14.9
and_uc 15.5
android 124
chrome 125
chrome 124
chrome 123
chrome 122
chrome 109
edge 124
edge 123
firefox 126
firefox 125
firefox 124
firefox 115
ios_saf 17.5
ios_saf 17.4
ios_saf 17.3
ios_saf 16.6-16.7
ios_saf 15.6-15.8
kaios 3.0-3.1
kaios 2.5
op_mini all
op_mob 80
opera 109
opera 108
opera 107
safari 17.5
safari 17.4
samsung 24
samsung 23
조금 부족한 거 같아서 더 추가해보기로 했다. 기준은 google이 설정한 Baseline의 폭넓게 사용 가능을 지원하는 브라우저로 잡았다. 실제로 browserslist에서도 Baseline을 지원하는 query를 설정하는 작업을 시작하고 있었다.
폭넓게 사용 가능: 새로 상호 운용 가능한 날짜로부터 30개월이 지났습니다. 이 기능은 지원에 대한 걱정 없이 대부분의 사이트에서 사용할 수 있습니다.
Baseline에 대한 query는 browserslist issue에서 찾을 수 있었다. 심지어 불과 일주일 전의 comment 였다.
browserslist: [
'chrome >0 and last 2.5 years',
'edge >0 and last 2.5 years',
'safari >0 and last 2.5 years',
'firefox >0 and last 2.5 years',
'and_chr >0 and last 2.5 years',
'and_ff >0 and last 2.5 years',
'ios >0 and last 2.5 years',
];
browserslist를 보면 defulats가 아닌 custom으로 browsers를 설정할 경우 last 2 versions, not dead, > 0.2%
를 추가하는 걸 권장하고 있었다. last 2 versions
만 넣는 건 인기 있는 옛 브라우저를 포함하지 않고, > 0.2%
만 넣는 건 인기 있는 브라우저만 더 인기있게 만들기 때문에 둘을 같이 넣으라는 얘기였다. 이때 이미 2.5years로 체크를 해주고 있었기에 last 2 versions
는 넣을 필요가 없었고 그 외 나머지 not dead
와 % 비율
을 추가해주었다. 이때 퍼센트 비율은 제한을 더 줘도 괜찮을 거 같아서 0.3으로 올렸다.
browserslist: [
'> 0.3%',
'chrome >0 and last 2.5 years',
'edge >0 and last 2.5 years',
'safari >0 and last 2.5 years',
'firefox >0 and last 2.5 years',
'and_chr >0 and last 2.5 years',
'and_ff >0 and last 2.5 years',
'ios >0 and last 2.5 years',
'not dead',
];